package com.example.kotlindemo.pages // 确保这是你的包名

import android.content.res.Resources
import android.graphics.Typeface
import android.os.Bundle
import android.util.Log
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.viewpager2.widget.ViewPager2
import com.example.kotlindemo.R
import com.example.kotlindemo.adapter.ViewPagerTabAdapter
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator

class ViewPagerTabActivity : AppCompatActivity() {


    private var viewPager: ViewPager2? = null // ViewPager2 实例
    private var tabLayout: TabLayout? = null // TabLayout 实例

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // enableEdgeToEdge() // 根据你的 UI 设计需求，决定是否启用沉浸式边缘到边缘模式
        setContentView(R.layout.activity_view_pager_tab) // 设置 Activity 的布局文件

        // 可选: 如果使用了沉浸式布局，处理窗口边衬（内边距）
        // ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
        //     val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
        //     v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
        //     insets
        // }

        // --- 使用 findViewById 初始化视图 ---
        viewPager = findViewById(R.id.view_pager_tab_main) // 通过 ID 查找 ViewPager2
        tabLayout = findViewById(R.id.view_pager_tab)      // 通过 ID 查找 TabLayout

        // --- 基本的视图空检查 ---
        if (viewPager == null || tabLayout == null) {
            Log.e("ViewPagerTabActivity", "错误：在布局中未找到 ViewPager2 或 TabLayout。请检查 XML 中的 ID。")
            // 在这里处理错误，例如显示提示信息或结束 Activity
            return // 如果视图未找到，则退出 onCreate 方法
        }

        // --- 设置 ViewPager2 的适配器 ---
        // !!重要!! 将 ViewPagerTabAdapter 替换为你实际的适配器类名
        val adapter = ViewPagerTabAdapter(this) // 创建适配器实例
        viewPager?.adapter = adapter // 为 ViewPager2 设置适配器 (使用安全调用 ?. )

        // --- 禁止 ViewPager2 通过滑动切换页面 ---
        viewPager?.isUserInputEnabled = false // 设置为 false 禁止用户滑动 (使用安全调用 ?. )

        // --- 使用 TabLayoutMediator 连接 TabLayout 和 ViewPager2 ---
        // 前面已检查过 tabLayout 和 viewPager 不为 null，这里可以使用非空断言 !!
        TabLayoutMediator(tabLayout!!, viewPager!!) { tab, position ->
            // 为每个 Tab 设置标题文字
            tab.text = getTabTitle(position)
            // 如果需要，也可以在这里设置图标: tab.setIcon(getTabIcon(position))
        }.attach() // attach() 方法应用连接

        // --- 处理 TabLayout 文字样式的动态变化 ---
        // 添加 Tab 选中状态变化的监听器
        tabLayout?.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
            // 当 Tab 被选中时调用
            override fun onTabSelected(tab: TabLayout.Tab?) {
                // 使用 let 安全地处理可能为 null 的 tab
                tab?.let { updateTabTextView(it, true) } // 更新文字样式为选中状态
            }

            // 当 Tab 取消选中时调用
            override fun onTabUnselected(tab: TabLayout.Tab?) {
                tab?.let { updateTabTextView(it, false) } // 更新文字样式为未选中状态
            }

            // 当 Tab 再次被选中时调用 (当前已选中，再次点击)
            override fun onTabReselected(tab: TabLayout.Tab?) {
                // 可选：如果需要，可以在这里也更新样式
                // tab?.let { updateTabTextView(it, true) }
            }
        })

        // --- 初始化第一个 Tab 的选中样式 ---
        // 使用 post 将任务添加到消息队列，确保在布局完成后执行
        // --- 布局完成后，正确初始化【所有】Tab 的样式 ---
        tabLayout?.post {
            // 获取初始选中的 Tab 位置，如果 tabLayout 为 null 或没有选中项，默认为 0
            val selectedPosition = tabLayout?.selectedTabPosition ?: 0
            // 获取 Tab 的总数
            val tabCount = tabLayout?.tabCount ?: 0



            // 遍历每一个 Tab
            for (i in 0 until tabCount) {
                val tab = tabLayout?.getTabAt(i)
                // 使用 let 安全处理可能为 null 的 tab
                tab?.let { currentTab ->
                    // 判断当前遍历到的 Tab 是否是初始选中的那个
                    val isInitiallySelected = (i == selectedPosition)
                    // 调用我们之前的样式更新函数，为每个 Tab 应用正确的初始样式
                    updateTabTextView(currentTab, isInitiallySelected)
                }
            }
        }

    }

    // --- 辅助函数：更新 Tab 内 TextView 的样式 ---
    private fun updateTabTextView(tab: TabLayout.Tab, isSelected: Boolean) {
        val view = tab.view
        for (i in 0 until view.childCount) {
            val child = view.getChildAt(i)
            if (child is TextView) {
                val textView = child
                try {
                    if (isSelected) {
                        textView.setTextAppearance(R.style.TextAppearance_App_OuterTab_Selected)
                    } else {
                        textView.setTextAppearance(R.style.TextAppearance_App_OuterTab_Unselected)
                    }
                } catch (e: Resources.NotFoundException) {
                    textView.textSize = if (isSelected) 16f else 14f
                    textView.setTypeface(if (isSelected) Typeface.DEFAULT_BOLD else Typeface.DEFAULT)
                }
                break
            }
        }
    }

    // --- 辅助函数：根据位置获取 Tab 的标题 ---
    private fun getTabTitle(position: Int): String {

        return when (position) {
            0 -> getString(R.string.title_home)     // 假设你定义了 title_home
            1 -> getString(R.string.title_messages) // 假设你定义了 title_messages
            2 -> getString(R.string.title_profile)  // 假设你定义了 title_profile
            else -> "标签 ${position + 1}" // 提供一个默认的备用标题
        }
    }

    // 可选：如果需要设置图标，可以提供类似的辅助函数
    // private fun getTabIcon(position: Int): Int { ... }

    // 在 Activity 销毁时清理视图引用是一个好习惯，虽然不像 Fragment 中那么关键
    override fun onDestroy() {
        viewPager = null
        tabLayout = null
        super.onDestroy()
    }
}
